/**
 * @class Slideshow
 * @param fotos
 * @param div
 * @returns
 */
function Slideshow (fotos,div){
	/**
	 * @field
	 */
	var fotos= fotos;
	/**
	 * @field
	 */
	var div = $(div);
	/**
	 * div dello slideshow
	 * @field
	 */
	var slideCont = $('#slide-container');
	/**
	 * Immagini in cache
	 * @field
	 */
	var cachedImages = [];
	/**
	 * Numero di immagini in cache
	 * @field
	 */
	var imagesCached = 0;
	/**
	 * Immagine correntemente visualizzata
	 * @field
	 */
	var pos = 0;
	/**
	 * Container Image
	 * @field
	 */
	var imgCont = $('#slides #img');
	/**
	 * @field
	 */
	var firstRun = 1;
	/**
	 * Funzione di startup
	 */
	var button = $('.link-s')
	/**
	 * Mostra la gallery ed assegna i comandi
	 */ 
	var mostra = function(){
		
		if(fotos.length == 0){
			window.messaggioPopup.display('Errore','La gallery non ha nessun foto!');
			return;
		}
		
		draw();
		
		div.show('scale');
		div.focus();
		div.bind('keydown',comandi);
		
	}
	/**
	 * Chiude la gallery
	 */
	var close = function(){
		
		div.hide('scale');
		div.unbind('keydown',comandi);
		
	}
	/**
	 * 
	 */
	var comandi = function(e){
		if(e.keyCode == 37){
			indietro();
		}
		
		if(e.keyCode == 39){
			avanti();
		}
		
		if(e.keyCode == 27){
			close();
		}
	}
	
	/**
	 * Mette la corretta immagine nel div
	 */
	var setImage = function(){
		
		cache();//Richiamo la cache
		
		imgCont.fadeOut('slow',function(){
			
			if(firstRun == 1){
				firstRun = 0;
			}else{
				imgCont.empty();
			}
			imgCont.append(cachedImages[pos]);
			imgCont.fadeIn();
		});
		
		
	}
	/**
	 * Meccanismo di cache
	 */
	var cache = function() {
		
		//Salta esecuzione se ho tutte le foto in memoria
		if(imagesCached == fotos.length){
			return;
		}
		
		var prev = modulo(pos-1,fotos.length);
		var next = modulo(pos+1,fotos.length);
		
		if(cachedImages[pos] == undefined){
			cachedImages[pos] = $('<img src="upload/raw/'+fotos[pos].nomefoto+'"/>').bind('click',function(){
				window.ajax.doAjax('index.php?c=CFoto&a=viewfoto&id='+fotos[pos].id);
			});
			imagesCached++;
		}
		
		if(cachedImages[prev] == undefined){
			cachedImages[prev] = $('<img src="upload/raw/'+fotos[prev].nomefoto+'"/>').bind('click',function(){
				window.ajax.doAjax('index.php?c=CFoto&a=viewfoto&id='+fotos[prev].id);
			});
			imagesCached++;
		}
		
		if(cachedImages[next] == undefined){
			cachedImages[next] = $('<img src="upload/raw/'+fotos[next].nomefoto+'"/>').bind('click',function(){
				window.ajax.doAjax('index.php?c=CFoto&a=viewfoto&id='+fotos[next].id);
			});
			imagesCached++;
		}
		
		return;
	}
	/**
	 * Avanti!
	 */
	var avanti = function(){
		
		pos++;
		pos = modulo(pos,fotos.length)
		setImage(pos);
	}
	/**
	 * Indietro!
	 */
	var indietro = function(){
		
		pos--;
		pos = modulo(pos,fotos.length)
		setImage(pos);
	}
	/**
	 * Disegna la foto!
	 */
	var draw = function(){
		
		div.css({'height':$(window).height(),
			'width':$(window).width()
		});
		
	}
	/**
	 * Fix per il modulo
	 */
	var modulo = function(n,m){
		return (((n%m)+m)%m);
	}
	
	
	/**
	 * Costruttore
	 */
	
	//Assegno le funzioni al div
	div.bind({'click':close});
	
	//Carico l'immagine nel div
	setImage();
	
	//Impedisco la propagazione dell'evento click
	slideCont.bind('click',function(e){
		e.stopPropagation();
	})
	
	//On window resize, redraw
	$(window).resize(draw);
	
	//Controlli
	div.find('#controllo-left').bind('click',indietro);
	div.find('#controllo-right').bind('click',avanti);
	
	//Pulsante slideshow
	button.click(mostra)
	
	//TODO:Assegno i pulsanti
	
	
	
}
